package com.algorithm.sort;

import java.util.Arrays;

/**
 * 在看冒泡排序
 * */
public class BubboSort {

	public static void main(String args[]){
		int [] array = new int[]{20,12,332,212,23,4533,2,23,4,532,245,342,22,442,32,442,21,2,34,35,32,123,1234,2323,132322};
	//	bobboSort(array);
		bubbleSort(array,array.length);
//		bubbleSort(array);
	}

	private static void bobboSort(int [] array){
		int count = 0;
		for(int i=0;i<array.length;i++){
			int temp ;
			for(int j=i+1;j<array.length;j++){
				count++;
				int tempi = array[i];
				int tempj = array[j];
				if(tempi>tempj){
					temp =  array[i];
					array[i] = array[j];
					array[j] = temp;

				}
			}
		}
		System.out.println(count);
	}

	public static  void bubbleSort(int[] arr, int n) {
		int count = 0;
		if (n <= 1) return;       //如果只有一个元素就不用排序了

		for (int i = 0; i < n; ++i) {
			// 提前退出冒泡循环的标志位,即一次比较中没有交换任何元素，这个数组就已经是有序的了
			boolean flag = false;
			for (int j = 0; j < n - i - 1; ++j) {        //此处你可能会疑问的j<n-i-1，因为冒泡是把每轮循环中较大的数飘到后面，
				count++;
				// 数组下标又是从0开始的，i下标后面已经排序的个数就得多减1，总结就是i增多少，j的循环位置减多少
				if (arr[j] > arr[j + 1]) {        //即这两个相邻的数是逆序的，交换
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
					flag = true;
					System.out.println(Arrays.toString(arr));
				}
				System.out.println("break");
			}
			if (!flag) break;//没有数据交换，数组已经有序，退出排序
		}

		System.out.println(count);
	}

	public static void bubbleSort(int[] arr) {
		int temp;
		for(int i=0;i<arr.length-1;i++){//冒泡趟数
			for(int j=0;j<arr.length-i-1;j++){
				if(arr[j+1]<arr[j]){
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
	}

}
